@苏苏
3年前 提问
1个回答
java 的异常处理的五个关键词是什么
Andrew
3年前
异常处理关键字:try、catch、finally、throw、throws
异常:异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
try
里面是可能出现异常的语句或者代码块。后面可以跟一个或多个catch代码段。出现异常,终止try代码段的执行,根据错误的类型找到对应的catch执行。
1) 必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。
2) 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
格式
try{
//需要监听的代码块
}
代码演示
public class ExceptionTest {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
try{ //监听代码块
int a=input.nextInt();
int b=input.nextInt();
double sum=a/b;
System.out.println(sum);
}
catch(InputMismatchException e){
System.out.println("只能输入数字");
}
catch(ArithmeticException e){
System.out.println("分母不能为0");
}
catch(Exception e){ //Exception是所有异常的父类
System.out.println("发生了其他异常");
}
finally{ //不管是否出现异常,finally一定会被执行
System.out.println("程序结束");
}
}
}
catch
在方法中使用try-catch的语句块来处理异常。
格式
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
代码演示
public class TryCatchDemo {
public static void main(String[] args) {
try {// 当产生异常时,必须有处理方式。要么捕获,要么声明。
read("b.txt");
} catch (FileNotFoundException e) {// 括号中需要定义什么呢?
//try中抛出的是什么异常,在括号中就定义什么异常类型,也可以直接定义父类Exception
System.out.println(e);
}
System.out.println("over");
}
/*
*
* 我们 当前的这个方法中 有异常 有编译期异常
*/
public static void read(String path) throws FileNotFoundException {
if (!path.equals("a.txt")) {//如果不是 a.txt这个文件
// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
throw new FileNotFoundException("文件不存在");
}
}
}
finally
有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。所以这个地方要避免使用return
格式
finally{
//finally块里的语句不管异常是否出现,都会被执行
}
修饰符 返回值 方法名 () throws 异常类型{ //throws只是用来声明异常,是否抛出由方法调用者决定
//代码块
}
代码演示
public class TryCatchDemo4 {
public static void main(String[] args) {
try {
read("a.txt");
} catch (FileNotFoundException e) {
//抓取到的是编译期异常 抛出去的是运行期
throw new RuntimeException(e);
} finally {
System.out.println("不管程序怎样,这里都将会被执行。");
}
System.out.println("over");
}
/*
*
* 我们 当前的这个方法中 有异常 有编译期异常
*/
public static void read(String path) throws FileNotFoundException {
if (!path.equals("a.txt")) {//如果不是 a.txt这个文件
// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
throw new FileNotFoundException("文件不存在");
}
}
}
throw
用于方法声明时出抛出。
格式
throw new 异常类名(参数);
代码演示
public class ThrowDemo {
public static void main(String[] args) {
//创建一个数组
int[] arr = {2,4,52,2};
//根据索引找对应的元素
int index = 4;
int element = getElement(arr, index);
System.out.println(element);
System.out.println("over");
}
/*
* 根据 索引找到数组中对应的元素
*/
public static int getElement(int[] arr,int index){
//判断 索引是否越界
if(index<0 || index>arr.length-1){
/*
判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。
这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。
*/
throw new ArrayIndexOutOfBoundsException("哥们,角标越界了~~~");
//这是RuntimeException,抛出后不需要处理
}
int element = arr[index];
return element;
}
}
throws
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).
格式
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
代码演示
public class ThrowsDemo {
public static void main(String[] args) throws FileNotFoundException {
read("a.txt");
}
// 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明
public static void read(String path) throws FileNotFoundException {
if (!path.equals("a.txt")) {//如果不是 a.txt这个文件
// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
throw new FileNotFoundException("文件不存在");
}
}
}